package beanstao.util.store.dal.interfaces;

import beanstao.util.id.Id;
import beanstao.util.store.domainobject.DomainList;
import beanstao.util.store.domainobject.XmlDomain;


/**
 * 数据的Query功能接口(基础接口，复杂查询需继承重新定义)。<br>
 * @author beanstao@google.com 
 * @version 1.5
 * @date 2010-08-11 17:28:17
 * @param <T> XmlDomainObject
 */
public interface IDomainXmlSelect<T extends XmlDomain>
{

	/**
	 * 查询指定的实体是否已持久化
	 * @return
	 */
	boolean exists(T domain);

	/**
	 * 查询指定ID的实体是否已持久化
	 * @return
	 */
	boolean exists(Id id);

	/**
	 * 根据指定的实体的Id获得本实体的所有值
	 * @return
	 */
	T select(Id id);

	/**
	 * 根据指定的条件集合查询记录的个数，指定的条件为Null时，返回所有的记录的个数
	 * @param String 指定的条件
	 * @return
	 */
	int count(String xpath);

	/**
	 * 根据指定的条件集合查询记录集合
	 * @param where 指定的条件
	 * @return
	 */
	DomainList<T> select(String[] fields, String xpath);

	/**
	 * 根据指定的条件键值查询（单一条件查询）记录
	 * @param key
	 * @param value
	 * @return
	 */
	DomainList<T> select(String[] fields, String key, Object value);

	/**
	 * 查询所有
	 * @return
	 */
	DomainList<T> selectAll();

	/**
	 * 查询所有本实体的指定的属性值
	 * @param attrName 属性名
	 * @return
	 */
	DomainList<T> selectAttributeOfAll(String attrName);

	/**
	 * 根据实体Id查询该实体的Name,当没有Name时，返回ID的字符串
	 * @param id
	 * @return
	 */
	String queryNameById(Id id);
}
